<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/>
<title>DynamoRIO API: Symbol Access Library</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">DynamoRIO API
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__drsyms.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Symbol Access Library</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__info__t.html">_drsym_info_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__type__t.html">_drsym_type_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__func__type__t.html">_drsym_func_type_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__compound__type__t.html">_drsym_compound_type_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__int__type__t.html">_drsym_int_type_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__ptr__type__t.html">_drsym_ptr_type_t</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__drsym__line__info__t.html">_drsym_line_info_t</a></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:gac7ae60d7c499c017414574b22d6d4879"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__info__t.html">_drsym_info_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a></td></tr>
<tr class="memitem:ga75abd525d4d1710196d18d7c13b4c061"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__type__t.html">_drsym_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a></td></tr>
<tr class="memitem:ga3de06a92ea1be03694869f4f38045938"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__func__type__t.html">_drsym_func_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga3de06a92ea1be03694869f4f38045938">drsym_func_type_t</a></td></tr>
<tr class="memitem:gae601868c425dd7db2c7450014f1f47b5"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
<a class="el" href="struct__drsym__compound__type__t.html">_drsym_compound_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gae601868c425dd7db2c7450014f1f47b5">drsym_compound_type_t</a></td></tr>
<tr class="memitem:ga9075a62cb47f48762911d8cd7c683035"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__int__type__t.html">_drsym_int_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga9075a62cb47f48762911d8cd7c683035">drsym_int_type_t</a></td></tr>
<tr class="memitem:ga6536ad3236ff3d06eeeaf1450cb77b79"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__ptr__type__t.html">_drsym_ptr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga6536ad3236ff3d06eeeaf1450cb77b79">drsym_ptr_type_t</a></td></tr>
<tr class="memitem:ga91f8c849b1194872a42f2e272937bcd9"><td class="memItemLeft" align="right" valign="top">typedef bool(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga91f8c849b1194872a42f2e272937bcd9">drsym_enumerate_cb</a> )(const char *name, size_t modoffs, void *data)</td></tr>
<tr class="memitem:gad100c05f0c59c0d24a92563a1672caf2"><td class="memItemLeft" align="right" valign="top">typedef bool(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gad100c05f0c59c0d24a92563a1672caf2">drsym_enumerate_ex_cb</a> )(<a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a> *info, <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> status, void *data)</td></tr>
<tr class="memitem:ga1970a3bc66539e8187ee33c1ce5338e7"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__drsym__line__info__t.html">_drsym_line_info_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga1970a3bc66539e8187ee33c1ce5338e7">drsym_line_info_t</a></td></tr>
<tr class="memitem:ga05af254b09fc1b6fb45d3b83d458a351"><td class="memItemLeft" align="right" valign="top">typedef bool(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga05af254b09fc1b6fb45d3b83d458a351">drsym_enumerate_lines_cb</a> )(<a class="el" href="group__drsyms.html#ga1970a3bc66539e8187ee33c1ce5338e7">drsym_line_info_t</a> *info, void *data)</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga78793b36b5a0f529fb746b7ed0072442"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> { <br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442a3b3ded5e053b03dd0dde640a2157a7da">DRSYM_SUCCESS</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442a2fc0cc43fc4976260bca5fa948a5e2a5">DRSYM_ERROR</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442acff4fa6815bc58797d18faa9a009ac60">DRSYM_ERROR_INVALID_PARAMETER</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442ae263ac8a135526a666647874f2a32aac">DRSYM_ERROR_INVALID_SIZE</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442ab1f7615ed26be43741ca64a19a228df9">DRSYM_ERROR_LOAD_FAILED</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442a7f8fdc7d8da1402cdcd770983dee1da1">DRSYM_ERROR_SYMBOL_NOT_FOUND</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442af631dcc99434b8d60a763b751f735db3">DRSYM_ERROR_LINE_NOT_AVAILABLE</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442aba1d3dbb8ee3bb78b3c921300eefa21a">DRSYM_ERROR_NOT_IMPLEMENTED</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442a0de481dcf671e55ee1c01993bc204d7a">DRSYM_ERROR_FEATURE_NOT_AVAILABLE</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442aa0b083a538144f834aca12b71cc45652">DRSYM_ERROR_NOMEM</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga78793b36b5a0f529fb746b7ed0072442a779dfcdf51f4816da44d8b291fdc008d">DRSYM_ERROR_RECURSIVE</a>
<br/>
 }</td></tr>
<tr class="memitem:ga0b67aaba18a6215dfc1ff4c68b57d41e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga0b67aaba18a6215dfc1ff4c68b57d41e">drsym_flags_t</a> { <br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41eaaa4ed2e3efae09a5a43cc303e10a89ba">DRSYM_LEAVE_MANGLED</a> =  0x00, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41ea85d6e34c4fcb68eb97a07774102c4b0e">DRSYM_DEMANGLE</a> =  0x01, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41ea926400b119322cf478117df1a074c6dc">DRSYM_DEMANGLE_FULL</a> =  0x02, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41eaf5d562cfc61f955bb16455e199dc167e">DRSYM_DEMANGLE_PDB_TEMPLATES</a> =  0x04, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41ea551ab826d0640b71183cea1115c697cf">DRSYM_FULL_SEARCH</a> =  0x08, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga0b67aaba18a6215dfc1ff4c68b57d41ea2df0aa90a6e81681503326e2d8471703">DRSYM_DEFAULT_FLAGS</a> =  DRSYM_DEMANGLE
<br/>
 }</td></tr>
<tr class="memitem:gad3772ffd6c4e0d68738a31d7e25a3de9"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gad3772ffd6c4e0d68738a31d7e25a3de9">drsym_debug_kind_t</a> { <br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9a3906510b7b336284f72153a9c17127b0">DRSYM_SYMBOLS</a> =  (1 &lt;&lt; 0), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9aed224abfe6e8297c7ac7bed97efda8c4">DRSYM_LINE_NUMS</a> =  (1 &lt;&lt; 1), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9af9680fa1e5316576914fd50d253016da">DRSYM_ELF_SYMTAB</a> =  (1 &lt;&lt; 8), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9a114c2a44936aced9bbacc28a3916544c">DRSYM_DWARF_LINE</a> =  (1 &lt;&lt; 9), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9a32b1e745d5eb1a730c12f2b2ed973168">DRSYM_PDB</a> =  (1 &lt;&lt; 10), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9a0ef6cab1fee912683e2c99498492979b">DRSYM_PECOFF_SYMTAB</a> =  (1 &lt;&lt; 11), 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#ggad3772ffd6c4e0d68738a31d7e25a3de9a2a707a29f9e542d4f8f980b3a2cdaafe">DRSYM_MACHO_SYMTAB</a> =  (1 &lt;&lt; 12)
<br/>
 }</td></tr>
<tr class="memitem:ga96a58e29e8dbf2b5bdeb775cba46556e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556ea3df07cfcbf3fcb8e0e203d844421c8f3">DRSYM_TYPE_OTHER</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556eac4568bd915a95c4f2e641c593171ad14">DRSYM_TYPE_INT</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556ea038a317ac51c1ee78f6b85a1ad220d83">DRSYM_TYPE_PTR</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556ead608c508bb62b4ba8303fd66210e7481">DRSYM_TYPE_FUNC</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556ea6e6814cbb29a891671ca7047d49f1e1b">DRSYM_TYPE_VOID</a>, 
<br/>
&#160;&#160;<a class="el" href="group__drsyms.html#gga96a58e29e8dbf2b5bdeb775cba46556ea0967e981148150fd3c30468ec047e8aa">DRSYM_TYPE_COMPOUND</a>
<br/>
 }</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ga8f826a91db73acb16acb6649d26a86cd"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga8f826a91db73acb16acb6649d26a86cd">drsym_init</a> (IF_WINDOWS_ELSE(const wchar_t *, int) shmid)</td></tr>
<tr class="memitem:ga5d70a336713dd08ebe256c2eb964d3ae"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga5d70a336713dd08ebe256c2eb964d3ae">drsym_exit</a> (void)</td></tr>
<tr class="memitem:ga201e8a9bf6746cbfd232bc4e4a243d2b"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga201e8a9bf6746cbfd232bc4e4a243d2b">drsym_lookup_address</a> (const char *modpath, size_t modoffs, <a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a> *info, uint flags)</td></tr>
<tr class="memitem:ga6b5e419be145c6956e796dbf3da1678d"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga6b5e419be145c6956e796dbf3da1678d">drsym_get_type</a> (const char *modpath, size_t modoffs, uint levels_to_expand, char *buf, size_t buf_sz, <a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **type)</td></tr>
<tr class="memitem:gaa2e78185f942918db88c1cc249aa656b"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gaa2e78185f942918db88c1cc249aa656b">drsym_get_type_by_name</a> (const char *modpath, const char *type_name, char *buf, size_t buf_sz, <a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **type)</td></tr>
<tr class="memitem:ga676bf63e860bca8a8eb3a7fe7e0dfa00"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga676bf63e860bca8a8eb3a7fe7e0dfa00">drsym_get_func_type</a> (const char *modpath, size_t modoffs, char *buf, size_t buf_sz, <a class="el" href="group__drsyms.html#ga3de06a92ea1be03694869f4f38045938">drsym_func_type_t</a> **func_type)</td></tr>
<tr class="memitem:ga211ebdc7a540e7894a741aac8b2fc808"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga211ebdc7a540e7894a741aac8b2fc808">drsym_expand_type</a> (const char *modpath, uint type_id, uint levels_to_expand, char *buf, size_t buf_sz, <a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **expanded_type)</td></tr>
<tr class="memitem:ga2e6f4d91b65fc835c047c8ca23c83d06"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga2e6f4d91b65fc835c047c8ca23c83d06">drsym_lookup_symbol</a> (const char *modpath, const char *symbol, size_t *modoffs, uint flags)</td></tr>
<tr class="memitem:ga260c78496165b54b9a97d0a5e1f6f4d8"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols</a> (const char *modpath, <a class="el" href="group__drsyms.html#ga91f8c849b1194872a42f2e272937bcd9">drsym_enumerate_cb</a> callback, void *data, uint flags)</td></tr>
<tr class="memitem:gad883ab113dd57f77db0c279de2c055f8"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gad883ab113dd57f77db0c279de2c055f8">drsym_enumerate_symbols_ex</a> (const char *modpath, <a class="el" href="group__drsyms.html#gad100c05f0c59c0d24a92563a1672caf2">drsym_enumerate_ex_cb</a> callback, size_t info_size, void *data, uint flags)</td></tr>
<tr class="memitem:gad582a65dc1308335633e0c451035dbe0"><td class="memItemLeft" align="right" valign="top">DR_EXPORT size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gad582a65dc1308335633e0c451035dbe0">drsym_demangle_symbol</a> (char *dst, size_t dst_sz, const char *mangled, uint flags)</td></tr>
<tr class="memitem:ga8b7f688e703f8ca1937f091f53d3d697"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga8b7f688e703f8ca1937f091f53d3d697">drsym_get_module_debug_kind</a> (const char *modpath, <a class="el" href="group__drsyms.html#gad3772ffd6c4e0d68738a31d7e25a3de9">drsym_debug_kind_t</a> *kind)</td></tr>
<tr class="memitem:ga88e18dc10941953589e1023d61ba0a57"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga88e18dc10941953589e1023d61ba0a57">drsym_module_has_symbols</a> (const char *modpath)</td></tr>
<tr class="memitem:gad6eb2e2cee8fba5ee6eb439905b3ecb9"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols</a> (const char *modpath, const char *match, bool full, <a class="el" href="group__drsyms.html#ga91f8c849b1194872a42f2e272937bcd9">drsym_enumerate_cb</a> callback, void *data)</td></tr>
<tr class="memitem:ga5a983d39217af0f8a39868c66e0646d0"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga5a983d39217af0f8a39868c66e0646d0">drsym_search_symbols_ex</a> (const char *modpath, const char *match, uint flags, <a class="el" href="group__drsyms.html#gad100c05f0c59c0d24a92563a1672caf2">drsym_enumerate_ex_cb</a> callback, size_t info_size, void *data)</td></tr>
<tr class="memitem:gaf3fc654dfbb2d1e1717ee60229d7ac9f"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#gaf3fc654dfbb2d1e1717ee60229d7ac9f">drsym_free_resources</a> (const char *modpath)</td></tr>
<tr class="memitem:ga01b46346170fbc4580d2e4fb5c4ba616"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__drsyms.html#ga01b46346170fbc4580d2e4fb5c4ba616">drsym_enumerate_lines</a> (const char *modpath, <a class="el" href="group__drsyms.html#ga05af254b09fc1b6fb45d3b83d458a351">drsym_enumerate_lines_cb</a> callback, void *data)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="gae601868c425dd7db2c7450014f1f47b5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__compound__type__t.html">_drsym_compound_type_t</a>  <a class="el" href="group__drsyms.html#gae601868c425dd7db2c7450014f1f47b5">drsym_compound_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type information for a user-defined type: a struct, union, or class. </p>

</div>
</div>
<a class="anchor" id="ga91f8c849b1194872a42f2e272937bcd9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef bool(* drsym_enumerate_cb)(const char *name, size_t modoffs, void *data)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type for drsym_enumerate_symbols and drsym_search_symbols callback function. Returns whether to continue the enumeration or search.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>Name of the symbol. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">modoffs</td><td>Offset of the symbol from the module base. For Mach-O, the module base is after any __PAGEZERO segment. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to <a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols()</a> or <a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gad100c05f0c59c0d24a92563a1672caf2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef bool(* drsym_enumerate_ex_cb)(<a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a> *info, <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> status, void *data)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type for drsym_enumerate_symbols_ex and drsym_search_symbols_ex callback function. Returns whether to continue the enumeration or search.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>Information about the symbol. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">status</td><td>Status of <code>info:</code> either DRSYM_SUCCESS to indicate that all fields are filled in, or DRSYM_ERROR_LINE_NOT_AVAILABLE to indicate that line number information was not obtained. Line information is currently not available for any debug type when iterating. This has no bearing on whether line information is available when calling <a class="el" href="group__drsyms.html#ga201e8a9bf6746cbfd232bc4e4a243d2b">drsym_lookup_address()</a>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to <a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols()</a> or <a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga05af254b09fc1b6fb45d3b83d458a351"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef bool(* drsym_enumerate_lines_cb)(<a class="el" href="group__drsyms.html#ga1970a3bc66539e8187ee33c1ce5338e7">drsym_line_info_t</a> *info, void *data)</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type for drsym_enumerate_lines callback function. Returns whether to continue the enumeration.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">info</td><td>Information about the line. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to <a class="el" href="group__drsyms.html#ga01b46346170fbc4580d2e4fb5c4ba616">drsym_enumerate_lines()</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga3de06a92ea1be03694869f4f38045938"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__func__type__t.html">_drsym_func_type_t</a>  <a class="el" href="group__drsyms.html#ga3de06a92ea1be03694869f4f38045938">drsym_func_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type information for a function. </p>

</div>
</div>
<a class="anchor" id="gac7ae60d7c499c017414574b22d6d4879"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__info__t.html">_drsym_info_t</a>  <a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Data structure that holds symbol information </p>

</div>
</div>
<a class="anchor" id="ga9075a62cb47f48762911d8cd7c683035"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__int__type__t.html">_drsym_int_type_t</a>  <a class="el" href="group__drsyms.html#ga9075a62cb47f48762911d8cd7c683035">drsym_int_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type information for an integer base type. </p>

</div>
</div>
<a class="anchor" id="ga1970a3bc66539e8187ee33c1ce5338e7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__line__info__t.html">_drsym_line_info_t</a>  <a class="el" href="group__drsyms.html#ga1970a3bc66539e8187ee33c1ce5338e7">drsym_line_info_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Line information returned by <a class="el" href="group__drsyms.html#ga01b46346170fbc4580d2e4fb5c4ba616">drsym_enumerate_lines()</a>. This information should not be relied upon to be accessible beyond the return of the callback routine to which it is passed.</p>
<dl class="section note"><dt>Note:</dt><dd>On Windows, we have observed abnormally large values for <code>line</code> and <code>line_addr</code> (e.g., 0xfeefee or 0xe0b80000) in some symbol files. Be prepared for such values. </dd></dl>

</div>
</div>
<a class="anchor" id="ga6536ad3236ff3d06eeeaf1450cb77b79"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__ptr__type__t.html">_drsym_ptr_type_t</a>  <a class="el" href="group__drsyms.html#ga6536ad3236ff3d06eeeaf1450cb77b79">drsym_ptr_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Type information for a pointer type. </p>

</div>
</div>
<a class="anchor" id="ga75abd525d4d1710196d18d7c13b4c061"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="struct__drsym__type__t.html">_drsym_type_t</a>  <a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Base type information. Use the 'kind' member to downcast to a more specific type. </p>

</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="ga96a58e29e8dbf2b5bdeb775cba46556e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">anonymous enum</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556ea3df07cfcbf3fcb8e0e203d844421c8f3"></a>DRSYM_TYPE_OTHER</em>&nbsp;</td><td>
<p>Unknown type, cannot downcast. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556eac4568bd915a95c4f2e641c593171ad14"></a>DRSYM_TYPE_INT</em>&nbsp;</td><td>
<p>Integer, cast to drsym_int_type_t. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556ea038a317ac51c1ee78f6b85a1ad220d83"></a>DRSYM_TYPE_PTR</em>&nbsp;</td><td>
<p>Pointer, cast to drsym_ptr_type_t. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556ead608c508bb62b4ba8303fd66210e7481"></a>DRSYM_TYPE_FUNC</em>&nbsp;</td><td>
<p>Function, cast to drsym_func_type_t. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556ea6e6814cbb29a891671ca7047d49f1e1b"></a>DRSYM_TYPE_VOID</em>&nbsp;</td><td>
<p>Void. No further information. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga96a58e29e8dbf2b5bdeb775cba46556ea0967e981148150fd3c30468ec047e8aa"></a>DRSYM_TYPE_COMPOUND</em>&nbsp;</td><td>
<p>Struct, union, or class; cast to drsym_compound_type_t. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="gad3772ffd6c4e0d68738a31d7e25a3de9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__drsyms.html#gad3772ffd6c4e0d68738a31d7e25a3de9">drsym_debug_kind_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Bitfield indicating the availability of different kinds of debugging information for a module. The first 8 bits are reserved for platform independent qualities of the debug info, while the rest indicate exactly which kind of debug information is present. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9a3906510b7b336284f72153a9c17127b0"></a>DRSYM_SYMBOLS</em>&nbsp;</td><td>
<p>Any symbol information beyond exports. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9aed224abfe6e8297c7ac7bed97efda8c4"></a>DRSYM_LINE_NUMS</em>&nbsp;</td><td>
<p>Any line number info. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9af9680fa1e5316576914fd50d253016da"></a>DRSYM_ELF_SYMTAB</em>&nbsp;</td><td>
<p>ELF .symtab symbol names. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9a114c2a44936aced9bbacc28a3916544c"></a>DRSYM_DWARF_LINE</em>&nbsp;</td><td>
<p>DWARF line info. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9a32b1e745d5eb1a730c12f2b2ed973168"></a>DRSYM_PDB</em>&nbsp;</td><td>
<p>Windows PDB files. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9a0ef6cab1fee912683e2c99498492979b"></a>DRSYM_PECOFF_SYMTAB</em>&nbsp;</td><td>
<p>PE COFF (Cygwin or MinGW) symbol table names. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="ggad3772ffd6c4e0d68738a31d7e25a3de9a2a707a29f9e542d4f8f980b3a2cdaafe"></a>DRSYM_MACHO_SYMTAB</em>&nbsp;</td><td>
<p>Mach-O symbol table names. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga78793b36b5a0f529fb746b7ed0072442"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Success code for each DRSyms operation </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442a3b3ded5e053b03dd0dde640a2157a7da"></a>DRSYM_SUCCESS</em>&nbsp;</td><td>
<p>Operation succeeded. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442a2fc0cc43fc4976260bca5fa948a5e2a5"></a>DRSYM_ERROR</em>&nbsp;</td><td>
<p>Operation failed. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442acff4fa6815bc58797d18faa9a009ac60"></a>DRSYM_ERROR_INVALID_PARAMETER</em>&nbsp;</td><td>
<p>Operation failed: invalid parameter </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442ae263ac8a135526a666647874f2a32aac"></a>DRSYM_ERROR_INVALID_SIZE</em>&nbsp;</td><td>
<p>Operation failed: invalid size </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442ab1f7615ed26be43741ca64a19a228df9"></a>DRSYM_ERROR_LOAD_FAILED</em>&nbsp;</td><td>
<p>Operation failed: unable to load symbols </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442a7f8fdc7d8da1402cdcd770983dee1da1"></a>DRSYM_ERROR_SYMBOL_NOT_FOUND</em>&nbsp;</td><td>
<p>Operation failed: symbol not found </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442af631dcc99434b8d60a763b751f735db3"></a>DRSYM_ERROR_LINE_NOT_AVAILABLE</em>&nbsp;</td><td>
<p>Operation failed: line info not available </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442aba1d3dbb8ee3bb78b3c921300eefa21a"></a>DRSYM_ERROR_NOT_IMPLEMENTED</em>&nbsp;</td><td>
<p>Operation failed: not yet implemented </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442a0de481dcf671e55ee1c01993bc204d7a"></a>DRSYM_ERROR_FEATURE_NOT_AVAILABLE</em>&nbsp;</td><td>
<p>Operation failed: not available </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442aa0b083a538144f834aca12b71cc45652"></a>DRSYM_ERROR_NOMEM</em>&nbsp;</td><td>
<p>Operation failed: not enough memory </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga78793b36b5a0f529fb746b7ed0072442a779dfcdf51f4816da44d8b291fdc008d"></a>DRSYM_ERROR_RECURSIVE</em>&nbsp;</td><td>
<p>Operation failed: unavailable when recursive </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga0b67aaba18a6215dfc1ff4c68b57d41e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__drsyms.html#ga0b67aaba18a6215dfc1ff4c68b57d41e">drsym_flags_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Bitfield of options to each DRSyms operation. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41eaaa4ed2e3efae09a5a43cc303e10a89ba"></a>DRSYM_LEAVE_MANGLED</em>&nbsp;</td><td>
<p>Do not demangle C++ symbols. This option is not available for Windows PDB symbols. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41ea85d6e34c4fcb68eb97a07774102c4b0e"></a>DRSYM_DEMANGLE</em>&nbsp;</td><td>
<p>Demangle C++ symbols, omitting templates and parameter types. For all symbol types, templates are collapsed to &lt;&gt; while function parameters are omitted entirely (without any parentheses). </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41ea926400b119322cf478117df1a074c6dc"></a>DRSYM_DEMANGLE_FULL</em>&nbsp;</td><td>
<p>Demangle template arguments and parameter types. This option is not available for Windows PDB symbols (except in <a class="el" href="group__drsyms.html#gad582a65dc1308335633e0c451035dbe0">drsym_demangle_symbol()</a>). </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41eaf5d562cfc61f955bb16455e199dc167e"></a>DRSYM_DEMANGLE_PDB_TEMPLATES</em>&nbsp;</td><td>
<p>For Windows PDB, do not collapse templates to &lt;&gt;. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41ea551ab826d0640b71183cea1115c697cf"></a>DRSYM_FULL_SEARCH</em>&nbsp;</td><td>
<p>Windows-only, for <a class="el" href="group__drsyms.html#ga5a983d39217af0f8a39868c66e0646d0">drsym_search_symbols_ex()</a>. Requests a full search for all symbols and not just functions. This adds overhead: see <a class="el" href="group__drsyms.html#ga5a983d39217af0f8a39868c66e0646d0">drsym_search_symbols_ex()</a> for details. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga0b67aaba18a6215dfc1ff4c68b57d41ea2df0aa90a6e81681503326e2d8471703"></a>DRSYM_DEFAULT_FLAGS</em>&nbsp;</td><td>
<p>Default flags. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gad582a65dc1308335633e0c451035dbe0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT size_t drsym_demangle_symbol </td>
          <td>(</td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>dst_sz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>mangled</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Given a mangled or decorated C++ symbol, outputs the source name into <code>dst</code>. If the unmangled name requires more than <code>dst_sz</code> bytes, it is truncated and null-terminated to fit into <code>dst</code>. If the unmangling fails, <code>symbol</code> is copied as-is into <code>dst</code>, and truncated and null-terminated to fit. Returns zero if the name could not be unmangled; else returns the number of characters in the unmangled name, including the terminating null.</p>
<p>If the unmangling is successful but <code>dst</code> is too small to hold it, returns the number of characters required to store the name, including the terminating null, just as in a successful case. On Linux or for Windows PDB, <code>symbol</code> is copied as-is into <code>dst</code> just like for unmangling failure; for Windows PECOFF, the unmangled name is copied, truncated to fit, and null-terminated.</p>
<p>If there was overflow, the return value may be an estimate of the required size, so a second attempt with the return value is not guaranteed to be successful. If the caller needs the full name, they may need to make multiple attempts with a larger buffer.</p>
<dl class="section note"><dt>Note:</dt><dd>If the passed-in mangled symbol is truncated already, there is no guarantee that the demangling will even partically succeed.</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>Output buffer for demangled name. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dst_sz</td><td>Size of the output buffer in bytes. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mangled</td><td>Mangled C++ symbol to demangle. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. DRSYM_DEMANGLE is implied. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga01b46346170fbc4580d2e4fb5c4ba616"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_enumerate_lines </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga05af254b09fc1b6fb45d3b83d458a351">drsym_enumerate_lines_cb</a>&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Enumerates all source lines for a given module. Calls the given callback function for each line. If the callback returns false, the enumeration will end.</p>
<p>If an individual compilation unit is missing line number information, the callback will still be called once for that unit, with the fields other than <code>cu_name</code> set to NULL or 0.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callback</td><td>Function to call for each line. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to callback. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga260c78496165b54b9a97d0a5e1f6f4d8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_enumerate_symbols </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga91f8c849b1194872a42f2e272937bcd9">drsym_enumerate_cb</a>&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Enumerates all symbol information for a given module, including exports. Calls the given callback function for each symbol. If the callback returns false, the enumeration will end.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callback</td><td>Function to call for each symbol found. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to callback. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. Ignored for Windows PDB (DRSYM_PDB) except for DRSYM_DEMANGLE_PDB_TEMPLATES. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gad883ab113dd57f77db0c279de2c055f8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_enumerate_symbols_ex </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#gad100c05f0c59c0d24a92563a1672caf2">drsym_enumerate_ex_cb</a>&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>info_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Enumerates all symbol information for a given module, including exports. Calls the given callback function for each symbol, passing full information about the symbol (as opposed to selected information returned by <a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols()</a>). If the callback returns false, the enumeration will end.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callback</td><td>Function to call for each symbol found. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">info_size</td><td>The size of the drsym_info_t struct to pass to <code>callback</code>. Enough space for each name will be allocated automatically. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to callback. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. Ignored for Windows PDB (DRSYM_PDB) except for DRSYM_DEMANGLE_PDB_TEMPLATES. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga5d70a336713dd08ebe256c2eb964d3ae"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_exit </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Clean up and shut down the symbol access library. </p>

</div>
</div>
<a class="anchor" id="ga211ebdc7a540e7894a741aac8b2fc808"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_expand_type </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>type_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>levels_to_expand</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_sz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **&#160;</td>
          <td class="paramname"><em>expanded_type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves symbol type information for all sub-types of the type referenced by <code>type_id</code>. After a successful execution, <code>*expanded_type</code> points to the expanded type. All memory used to represent the types comes from <code>buf</code>, so the caller only needs to dispose <code>buf</code> to free them. Returns DRSYM_ERROR_NOMEM if the buffer is not big enough.</p>
<p>The initial type index to pass as <code>type_id</code> can be retrieved by calling <a class="el" href="group__drsyms.html#ga6b5e419be145c6956e796dbf3da1678d">drsym_get_type()</a> or <a class="el" href="group__drsyms.html#ga676bf63e860bca8a8eb3a7fe7e0dfa00">drsym_get_func_type()</a>.</p>
<p>The resulting expanded type tree may be recursive, so the caller should take care when traversing it. Any already-referenced type is guaranteed to have a smaller pointer value than its parent. This allows safe traversing without recording the already-seen types.</p>
<dl class="section note"><dt>Note:</dt><dd>This function is currently implemented only for Windows PDB symbols (DRSYM_PDB).</dd>
<dd>
The public Windows symbol files typically do not contain type information for function parameters.</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type_id</td><td>The type index, acquired from a prior call to <a class="el" href="group__drsyms.html#ga6b5e419be145c6956e796dbf3da1678d">drsym_get_type()</a> or <a class="el" href="group__drsyms.html#ga676bf63e860bca8a8eb3a7fe7e0dfa00">drsym_get_func_type()</a>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">levels_to_expand</td><td>The maximum levels of sub-types to expand. Set to UINT_MAX for unlimited expansion. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Memory used for the types. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buf_sz</td><td>Number of bytes in <code>buf</code>. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">expanded_type</td><td>Pointer to the expanded type tree for the symbol. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gaf3fc654dfbb2d1e1717ee60229d7ac9f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_free_resources </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Indicates that no further symbol queries will be performed and that this module's debug information can be de-allocated. A later query will result in a new load. The typical usage is to call this after a series of queries at module load. For large applications with many libraries, calling this can save hundreds of MB of memory.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be unloaded.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>When called from within a callback for <a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols()</a> or <a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a>, will fail with DRSYM_ERROR_RECURSIVE as it is not safe to free resources while iterating. </dd></dl>

</div>
</div>
<a class="anchor" id="ga676bf63e860bca8a8eb3a7fe7e0dfa00"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_get_func_type </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>modoffs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_sz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga3de06a92ea1be03694869f4f38045938">drsym_func_type_t</a> **&#160;</td>
          <td class="paramname"><em>func_type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves function type information for a given module offset. After a successful execution, <code>*func_type</code> points to the function type. All memory used to represent the types comes from <code>buf</code>, so the caller only needs to dispose <code>buf</code> to free them. Returns DRSYM_ERROR_NOMEM if the buffer is not big enough.</p>
<p>This routine does not expand arguments of function or compound types into their child types.</p>
<dl class="section note"><dt>Note:</dt><dd>This function is currently implemented only for Windows PDB symbols (DRSYM_PDB).</dd>
<dd>
The public Windows symbol files typically do not contain type information for function parameters.</dd>
<dd>
Despite the name, this routine will retrieve type information for non-functions as well.</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">modoffs</td><td>The offset from the base of the module specifying the start address of the function. For Mach-O, the module base is after any __PAGEZERO segment. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Memory used for the types. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buf_sz</td><td>Number of bytes in <code>buf</code>. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">func_type</td><td>Pointer to the type of the function. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga8b7f688e703f8ca1937f091f53d3d697"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_get_module_debug_kind </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#gad3772ffd6c4e0d68738a31d7e25a3de9">drsym_debug_kind_t</a> *&#160;</td>
          <td class="paramname"><em>kind</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Outputs the kind of debug information available for the module <code>modpath</code> in <code>*kind</code> if the operation succeeds.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">kind</td><td>The kind of debug information available. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga6b5e419be145c6956e796dbf3da1678d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_get_type </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>modoffs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>levels_to_expand</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_sz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves symbol type information for a given module offset. After a successful execution, <code>*type</code> points to the function type. All memory used to represent the types comes from <code>buf</code>, so the caller only needs to dispose <code>buf</code> to free them. Returns DRSYM_ERROR_NOMEM if the buffer is not big enough.</p>
<p>This routine expands arguments of function or fields compound types into their child types as far as <code>levels_to_expand</code> levels deep. The resulting expanded type tree may be recursive, so the caller should take care when traversing it. Any already-referenced type is guaranteed to have a smaller pointer value than its parent. This allows safe traversing without recording the already-seen types.</p>
<p>When querying type information for a symbol that has already been located via <a class="el" href="group__drsyms.html#ga201e8a9bf6746cbfd232bc4e4a243d2b">drsym_lookup_address()</a> or via enumeration or searching, it is better to invoke <a class="el" href="group__drsyms.html#ga211ebdc7a540e7894a741aac8b2fc808">drsym_expand_type()</a> using the <code>type_id</code> parameter of <a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a> to properly handle cases where multiple symbols map to the same module offset.</p>
<dl class="section note"><dt>Note:</dt><dd>This function is currently implemented only for Windows PDB symbols (DRSYM_PDB).</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">modoffs</td><td>The offset from the base of the module specifying the start address of the function. For Mach-O, the module base is after any __PAGEZERO segment. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">levels_to_expand</td><td>The maximum levels of sub-types to expand. Set to UINT_MAX for unlimited expansion. Further expansion can be performed by calling <a class="el" href="group__drsyms.html#ga211ebdc7a540e7894a741aac8b2fc808">drsym_expand_type()</a>. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Memory used for the types. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buf_sz</td><td>Number of bytes in <code>buf</code>. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">type</td><td>Pointer to the type of the function. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gaa2e78185f942918db88c1cc249aa656b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_get_type_by_name </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>type_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buf</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>buf_sz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga75abd525d4d1710196d18d7c13b4c061">drsym_type_t</a> **&#160;</td>
          <td class="paramname"><em>type</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves symbol type information for a given <code>type_name</code>. After a successful execution, <code>*type</code> points to the type of the symbol. All memory used to represent the type comes from <code>buf</code>, so the caller only needs to dispose <code>buf</code> to free everything. Returns DRSYM_ERROR_NOMEM if the buffer is not big enough.</p>
<dl class="section note"><dt>Note:</dt><dd>This function is currently implemented only for Windows PDB symbols (DRSYM_PDB).</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">type_name</td><td>The string name of the base type. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Memory used for the type. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buf_sz</td><td>Number of bytes in <code>buf</code>. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">type</td><td>Pointer to the type for the symbol. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga8f826a91db73acb16acb6649d26a86cd"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_init </td>
          <td>(</td>
          <td class="paramtype">IF_WINDOWS_ELSE(const wchar_t *, int)&#160;</td>
          <td class="paramname"><em>shmid</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Initialize the symbol access library. Can be called multiple times (by separate components, normally) but each call must be paired with a corresponding call to <a class="el" href="group__drsyms.html#ga5d70a336713dd08ebe256c2eb964d3ae">drsym_exit()</a>, and only the symbol server parameter of the first call will be honored.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">shmid</td><td>Identifies the symbol server for sideline operation. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>Sideline operation is not yet implemented. </dd></dl>

</div>
</div>
<a class="anchor" id="ga201e8a9bf6746cbfd232bc4e4a243d2b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_lookup_address </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>modoffs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#gac7ae60d7c499c017414574b22d6d4879">drsym_info_t</a> *&#160;</td>
          <td class="paramname"><em>info</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves symbol information for a given module offset. When returning DRSYM_ERROR_LINE_NOT_AVAILABLE, the symbol information start_offs, end_offs, and name will still be valid.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">modoffs</td><td>The offset from the base of the module specifying the address to be queried. For Mach-O executables, the module base is after any __PAGEZERO segment. </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">info</td><td>Information about the symbol at the queried address. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. Ignored for Windows PDB (DRSYM_PDB) except for DRSYM_DEMANGLE_PDB_TEMPLATES. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga2e6f4d91b65fc835c047c8ca23c83d06"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_lookup_symbol </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>symbol</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>modoffs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieves the address for a given symbol name.</p>
<p>For Windows PDB symbols (DRSYM_PDB), we don't support the DRSYM_DEMANGLE_FULL flag. Also for Windows PDB, if DRSYM_DEMANGLE is set, <code>symbol</code> must include the template arguments. Consider using <a class="el" href="group__drsyms.html#ga5a983d39217af0f8a39868c66e0646d0">drsym_search_symbols_ex()</a> instead with "&lt;*&gt;" for each template instantation in order to locate all symbols regardless of template arguments.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">symbol</td><td>The name of the symbol being queried. To specify a target module, pass "modulename!symbolname" as the symbol string to look up. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">modoffs</td><td>The offset from the base of the module specifying the address of the specified symbol. For Mach-O, the module base is after any __PAGEZERO segment. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. Ignored for Windows PDB (DRSYM_PDB). </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga88e18dc10941953589e1023d61ba0a57"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_module_has_symbols </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Returns whether debug information is available for the module <code>modpath</code>. This can be faster than calling <a class="el" href="group__drsyms.html#ga8b7f688e703f8ca1937f091f53d3d697">drsym_get_module_debug_kind()</a>, but it should be equivalent to calling <a class="el" href="group__drsyms.html#ga8b7f688e703f8ca1937f091f53d3d697">drsym_get_module_debug_kind()</a> and looking for DRSYM_SYMBOLS in the output.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="gad6eb2e2cee8fba5ee6eb439905b3ecb9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_search_symbols </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>match</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>full</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#ga91f8c849b1194872a42f2e272937bcd9">drsym_enumerate_cb</a>&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Enumerates all symbol information (including exports) matching a pattern for a given module. Calls the given callback function for each matching symbol. If the callback returns false, the enumeration will end.</p>
<p>This routine is only supported for PDB symbols (DRSYM_PDB).</p>
<p>Modifying the demangling is currently not supported: DRSYM_DEFAULT_FLAGS is used.</p>
<p>Due to dbghelp leaving template parameters in place (they are removed for DRSYM_DEMANGLE in the drsyms library itself), searching may find symbols that do not appear to match due to drsyms having removed that part of the symbol name.</p>
<dl class="section note"><dt>Note:</dt><dd><a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a> with full=false is significantly faster and uses less memory than <a class="el" href="group__drsyms.html#ga260c78496165b54b9a97d0a5e1f6f4d8">drsym_enumerate_symbols()</a>, and is faster than <a class="el" href="group__drsyms.html#ga2e6f4d91b65fc835c047c8ca23c83d06">drsym_lookup_symbol()</a>, but requires dbghelp.dll version 6.3 or higher. If an earlier version is used, this function will use a slower mechanism to perform the search.</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">match</td><td>Regular expression describing the names of the symbols to be enumerated. To specify a target module, use the "module_pattern!symbol_pattern" format. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">full</td><td>Whether to search all symbols or (the default) just functions. A full search takes significantly more time and memory and eliminates the performance advantage over other lookup methods. A full search requires dbghelp.dll version 6.6 or higher. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callback</td><td>Function to call for each matching symbol found. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to callback. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga5a983d39217af0f8a39868c66e0646d0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="group__drsyms.html#ga78793b36b5a0f529fb746b7ed0072442">drsym_error_t</a> drsym_search_symbols_ex </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>modpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>match</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>flags</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__drsyms.html#gad100c05f0c59c0d24a92563a1672caf2">drsym_enumerate_ex_cb</a>&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>info_size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Enumerates all symbol information (including exports) matching a pattern for a given module. Calls the given callback function for each symbol, passing full information about the symbol (as opposed to selected information returned by <a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a>). If the callback returns false, the enumeration will end.</p>
<p>This routine is only supported for PDB symbols (DRSYM_PDB).</p>
<p>Modifying the demangling is currently not supported: DRSYM_DEFAULT_FLAGS is used.</p>
<p>Due to dbghelp leaving template parameters in place (they are removed for DRSYM_DEMANGLE in the drsyms library itself), searching may find symbols that do not appear to match due to drsyms having removed that part of the symbol name.</p>
<dl class="section note"><dt>Note:</dt><dd>The performance note for <a class="el" href="group__drsyms.html#gad6eb2e2cee8fba5ee6eb439905b3ecb9">drsym_search_symbols()</a> applies here as well.</dd></dl>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">modpath</td><td>The full path to the module to be queried. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">match</td><td>Regular expression describing the names of the symbols to be enumerated. To specify a target module, use the "module_pattern!symbol_pattern" format. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">flags</td><td>Options for the operation as a combination of drsym_flags_t values. DRSYM_LEAVE_MANGLED and DRSYM_DEMANGLE_FULL are ignored. DRSYM_FULL_SEARCH, if set, requests to search all symbols as opposed to the default of just functions. A full search takes significantly more time and memory and eliminates the performance advantage over other lookup methods. A full search requires dbghelp.dll version 6.6 or higher. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callback</td><td>Function to call for each matching symbol found. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">info_size</td><td>The size of the drsym_info_t struct to pass to <code>callback</code>. Enough space for each name will be allocated automatically. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>User parameter passed to callback. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer" style="float:none;text-align:center"><img border=0 src="favicon.png"> &nbsp;  DynamoRIO API version 5.0.0 --- Wed Sep 10 2014 21:36:44 &nbsp; <img border=0 src="favicon.png">
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>
